/**
*	@class IRenderer
*
*	@brief An interface for the renderer
*
*	@author William McVicar
*/

#pragma once

#ifndef __IRENDERER_H_INCLUDED__
#define __IRENDERER_H_INCLUDED__

//  Library Includes

//  Local Includes
#include "IFileSystem.h"

//  Macros

//  Types

//  Constants

//  Prototypes

namespace Protein
{

class RendererData;
class Camera;
class GeometryChunk;

template< typename T >
class Vector;

class IRenderer
{
	//Member Functions
public:

  IRenderer()  : m_pRendererData(nullptr), m_pActiveCamera( nullptr ){};
  virtual ~IRenderer(){}
	virtual HRESULT Initialise( HWND hWnd ) = 0;
	virtual void Render() = 0;

	virtual const RendererData* const GetRendererData() const;

  inline Camera* activeCamera() const;
  inline void activeCamera( Camera* _activeCamera );

protected: 

private: 

	//Member Variables
public:

protected: 

	RendererData*			m_pRendererData;

  Camera*           m_pActiveCamera;

private: 

};

#include "IRenderer.inl"

}

#endif //__IRENDERER_H_INCLUDED__
